package org.dxy.trigger.http.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dxy.api.dto.request.product.*;
import org.dxy.api.response.R;
import org.dxy.infrastructure.entity.query.ProductViewEntity;

/**
 * 产品应用服务接口
 */
public interface ProductApplicationService {
    
    /**
     * 创建产品
     */
    R<Long> create(CreateProductRequest request);
    
    /**
     * 更新产品
     */
    R<Void> update(Long productId, UpdateProductRequest request);
    
    /**
     * 启用产品
     */
    R<Void> enable(Long productId);
    
    /**
     * 禁用产品
     */
    R<Void> disable(Long productId);
    
    /**
     * 删除产品
     */
    R<Void> delete(Long productId);
    
    /**
     * 变更产品版本
     */
    R<Void> changeVersion(Long productId, ChangeProductVersionRequest request);
    
    /**
     * 更新产品BOM
     */
    R<Void> updateBOM(Long productId);
    
    /**
     * 分配工艺路线
     */
    R<Void> assignRoute(Long productId, AssignProductRouteRequest request);
    
    /**
     * 解绑工艺路线
     */
    R<Void> unassignRoute(Long productId, Long routeId);
    
    /**
     * 审核通过
     */
    R<Void> approve(Long productId);
    
    /**
     * 审核驳回
     */
    R<Void> reject(Long productId, RejectProductRequest request);
    
    /**
     * 分页查询产品列表
     */
    R<Page<ProductViewEntity>> list(Page<ProductViewEntity> page, ProductViewEntity query);
    
    /**
     * 根据ID查询产品详情
     */
    R<ProductViewEntity> getById(Long productId);
    
    /**
     * 根据状态查询产品列表
     */
    R<Page<ProductViewEntity>> getByStatus(Page<ProductViewEntity> page, String status);
    
    /**
     * 根据产品ID获取BOM信息
     */
    R<Object> getBOMByProductId(Long productId);
}